/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pizarra;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;

import mobilefeel.AndroidDevice;

import pizarra.vistas.VistaPizarra;
import pizarra.vistas.VistaPrincipal;

/**
 *
 * @author Christian
 */
public class Controlador {

	private PizarraMultitouch pizarraMultitouch;
    private VistaPrincipal vista;

    public Controlador() {
    	pizarraMultitouch = new PizarraMultitouch(this);
    	
        vista = new VistaPrincipal(this);
        vista.setLocationRelativeTo(null);
        vista.setVisible(true);
    }

	public void doIniciar(int puerto) throws IOException {
		pizarraMultitouch.iniciar(puerto);
		vista.setEstado("Escuchando en puerto " + puerto + "...");
	}
	
	public VistaPizarra doNuevaPizarra(AndroidDevice device) {
		Pizarra p = new Pizarra();
		pizarraMultitouch.nuevaPizarra(device, p);
		int ancho = pizarraMultitouch.getAnchoPizarra(device);
		int alto = pizarraMultitouch.getAltoPizarra(device);
		
    	VistaPizarra vp = new VistaPizarra(this, vista, p, null, ancho, alto);
        p.setVistaPizarra(vp);
		return vp;
	}

	public void doDispositivoConectado(String dispositivo) {
		vista.setEstado("Conexión entrante de " + dispositivo);
		vista.conexionRecibida();
	}

	public void doDispositivoDesconectado(String dispositivo, int restantes) {
		vista.setEstado(dispositivo + " desconectado");
		if (restantes == 0)
			vista.conexionesCerradas();
	}

	public void doDetener() throws IOException {
		pizarraMultitouch.detener();
		vista.setEstado("Servidor detenido");
	}

	public List<AndroidDevice> getDispositivosConectados() {
		return pizarraMultitouch.getDispositivosConectados();
	}

	public void doLimpiarPizarra(Pizarra pizarra) {
		pizarra.borrar();
		pizarra.getVistaPizarra().repaint();
	}

	public void doGuardar(Pizarra pizarra, File archivoPizarra) throws FileNotFoundException, IOException {
		ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(archivoPizarra));
		output.writeObject(pizarra);
		output.flush();
		output.close();
		vista.setEstado("Pizarra guardada");
	}

	public VistaPizarra doAbrir(AndroidDevice device, File file) throws FileNotFoundException, IOException, ClassNotFoundException {
		ObjectInputStream input = new ObjectInputStream(new FileInputStream(file));
		Pizarra p = (Pizarra)input.readObject();
		input.close();

		pizarraMultitouch.nuevaPizarra(device, p);
		int ancho = pizarraMultitouch.getAnchoPizarra(device);
		int alto = pizarraMultitouch.getAltoPizarra(device);
		
    	VistaPizarra vp = new VistaPizarra(this, vista, p, file, ancho, alto);
        p.setVistaPizarra(vp);
		return vp;
	}
	
}
